https://mp.weixin.qq.com/s/kK1leWcSZWIP0EhVv7wvWA

<!-- 作用域是一个变量或函数的可访问范围，作用域控制着变量或函数的可见性和生命周期。 -->


1.全局作用域：可以全局访问

最外层函数和最外层定义的变量拥有全局作用域
window上的对象属性方法拥有全局作用域
未定义直接复制的变量自动声明拥有全局作用域
过多的全局作用域变量会导致变量全局污染，命名冲突



2.函数作用域：只能在函数中访问使用哦

在函数中定义的变量，都只能在内部使用，外部无法访问
内层作用域可以访问外层，外层不能访问内层作用域



3.S6中的块级作用域：只在代码块中访问使用

使用ES6中新增的let、const声明的变量，具备块级作用域，块级作用域可以在函数中创建（由{}包裹的代码都是块级作用域）
let、const声明的变量不会变量提升，const也不能重复声明
块级作用域主要用来解决由变量提升导致的变量覆盖问题



<!-- 作用域链： -->
变量在指定的作用域中没有找到，会依次向上一层作用域进行查找，直到全局作用域。这个查找的过程被称为作用域链。